package com.zhx.common.user.domain.entity;

import lombok.Data;
import org.apache.commons.lang3.StringUtils;

import java.io.Serializable;
import java.util.Objects;
import java.util.Optional;

@Data
public class IpInfo implements Serializable {
    //注册时的ip
    private String createIp;

    //最新登录的ip
    private String updateIp;

    //注册时的ip详情
    private IpDetail createIpDetail;

    //最新登录的ip详情
    private IpDetail updateIpDetail;

    /**
     * 需要刷新的ip，这里判断更新ip就够，初始化的时候ip也是相同的，只需要设置的时候多设置进去就行
     * @return 如果不需要刷新，返回null；否则返回需要刷新的IP
     */
    public String needRefreshIpDetail() {
        // 检查是否需要刷新IP详情
        // 返回值类型为boolean：该函数会根据updateIpDetail是否为null返回不同的布尔值。如果updateIpDetail为null，则返回true；否则，返回false。
        boolean notNeedRefresh = Optional.ofNullable(updateIpDetail)
                // 获取IP地址
                .map(IpDetail::getIp)
                // 过滤出与updateIp相等的IP地址
                .filter(ip -> Objects.equals(ip, updateIp))
                // 判断是否存在与updateIp相等的IP地址
                .isPresent();
        // 如果不需要刷新，返回null；否则返回需要刷新的IP
        return notNeedRefresh ? null : updateIp;
    }


    public void refreshIp(String ip) {
        if(StringUtils.isBlank(ip)){
            return;
        }
        if(StringUtils.isBlank(createIp)){
            createIp = ip;
        }
        updateIp = ip;
    }

    public void refreshIpDetail(IpDetail ipDetail) {
        if(Objects.equals(createIp,ipDetail.getIp())){
            createIpDetail = ipDetail;
        }
        if(Objects.equals(updateIp,ipDetail.getIp())){
            updateIpDetail = ipDetail;
        }
    }
}
